package task

import (
	"k8s-admin/models"
	"k8s-admin/service/task"
	"k8s-admin/utils"

	"github.com/gin-gonic/gin"
)

/*
ansible
批量任务
*/

func TaskCreate(ctx *gin.Context) {
	req := &models.TaskReq{}
	if err := ctx.ShouldBindJSON(&req); err != nil {
		utils.ReturnContext(ctx).Failed("失败", err.Error())
	} else {
		err := task.NewTaskInterface().Create(req)
		if err != nil {
			utils.ReturnContext(ctx).Failed("失败", err)
		} else {
			utils.ReturnContext(ctx).Successful("成功", "创建成功")
		}
	}
}

func TaskLists(ctx *gin.Context) {
	lists, err := task.NewTaskInterface().List()
	if err != nil {
		utils.ReturnContext(ctx).Failed("失败", err)
	} else {
		utils.ReturnContext(ctx).Successful("成功", lists)
	}
}

func StartTask(ctx *gin.Context) {
	params := new(struct {
		ShellExec  string `form:"shell_exec" binding:"required"`
		HostsIp    string `form:"hosts_ip" binding:"required"`
		Module     string `form:"module" binding:"required"`
		TaskNumber string `form:"task_number" binding:"required"`
	})
	if err := ctx.ShouldBind(&params); err != nil {
		utils.ReturnContext(ctx).Failed("失败", err.Error())
	} else {
		data, err := task.NewTaskInterface().StartTask(params.ShellExec, params.HostsIp, params.Module, params.TaskNumber)
		if err != nil {
			utils.ReturnContext(ctx).Failed("失败", err.Error())
		} else {
			utils.ReturnContext(ctx).Successful("成功", data)
		}
	}
}

func TaskHistory(ctx *gin.Context) {
	lists, err := task.NewTaskInterface().HistoryLists()
	if err != nil {
		utils.ReturnContext(ctx).Failed("失败", err)
	} else {
		utils.ReturnContext(ctx).Successful("成功", lists)
	}
}

func TaskDelete(ctx *gin.Context) {
	params := new(struct {
		TaskNumber string `form:"task_number" binding:"required"`
	})
	if err := ctx.ShouldBind(&params); err != nil {
		utils.ReturnContext(ctx).Failed("失败", err.Error())
	} else {
		err := task.NewTaskInterface().Delete(params.TaskNumber)
		if err != nil {
			utils.ReturnContext(ctx).Failed("失败", err)
		} else {
			utils.ReturnContext(ctx).Successful("成功", "删除成功")
		}
	}
}

func TaskUpdate(ctx *gin.Context) {
	task_number := ctx.Param("task_number")
	req := models.TaskReq{}
	if err := ctx.ShouldBind(&req); err != nil {
		utils.ReturnContext(ctx).Failed("失败", err.Error())
	} else {
		err := task.NewTaskInterface().Update(task_number, &req)
		if err != nil {
			utils.ReturnContext(ctx).Failed("失败", err)
		} else {
			utils.ReturnContext(ctx).Successful("成功", "更新成功")
		}
	}
}
